2011年09月25日
川俣晶の縁側ソフトウェア技術雑記 total 4578 count

MVVMとBindingとWPFとWindows Phone

Written By: 川俣 晶連絡先

「MVVMは何となく避けて通っていた」

「なぜ」

「昔、MVCってのがあったんだよ」

「今でもあるよ」

「そこは突っ込むな。ともかくMVCは上手く機能しなかった」

「だから、名前が似ているMVVMを避けて通ったわけだね」

「まあ、そうだな」

「でも、違ったの?」

「そうだ。違った、Windows Phoneのコードを書いていて、ふと書いてきたソースを振り返った瞬間に驚いた」

「なぜ?」

「しっかりMVVMになっていたからだ」

「じゃあ、君がこうなるべきだと思って勝手に書いたコードがMVVMだったということ?」

「この場合はそういうことになる」

「それはなぜ?」

「WPFというか、Windows Phoneのアーキテクチャがそれを求めているので必然的にそうなった、という解釈もできるが、どうもそうでもない感じだ」

「というと?」

「昔々、MFCにはModelとViewがあったけどさ。基本的にViewはModelを知ってるけど、ModelはViewを知らない構造なんだ」

「そうか」

「でもさ。実際は両者が協調して動作しないととても性能が出せない」

「PCの性能が足りないってことだね」

「そうじゃない。PCの性能が上がっても焼け石に水だ」

「じゃあ、何?」

「MVVMのVとVMは双方向でインタラクトできるんだ」

「えっ?」

「WPFのバインディングで双方向のインタラクトが指定できるから、VM上でのデータ変更をVに反映することも、Vのレイヤーで起きたユーザー入力を自動的にVM上のデータに反映させることもできる」

「でもさ。2つを分けないで1つで書けばいいじゃん。面倒な連動なんて考えないでさ」

「そうじゃない。分けるメリットがあるんだ」

「えっ?」

「だからさ。VMレベルは抽象的な情報を提供するだけだが、Vレベルでは見せる実態を決める。だから、見かけをいじる場合は多くの場合Vだけでいい。必要な情報が提供されていない場合はVMもいじる必要があるけどね」

「それはいいことなの?」

「そうだ。外見の調整はよくある要求だが、それによって重要なロジックを壊してしまう可能性を減らせる」

「そうか」

「まあ、他にもいろいろあるけどな。まあ、自分のやっていたことが結果としてMVVMだと気づいた以上、これからはもっと意識的にMVVMしていくか」

「つまり、上から読んでもMVVM、下から読んでもMVVMってことだね」